#pragma once

/**
Data structure that can be used to send data with events
*/
struct IEventData
{
	virtual ~IEventData() {}
};

/**
Sample event data for the E_UNKNOWN event
*/
struct SEventData_E_UNKNOWN : public IEventData
{
	SEventData_E_UNKNOWN(float fDeltaTime) : m_fDeltaTime(fDeltaTime) {}
	~SEventData_E_UNKNOWN() {}

	/** Frametime */
	float m_fDeltaTime;
};

struct SEventData_MouseEvent : public IEventData
{
	SEventData_MouseEvent() : m_nMWheelDelta(0), m_nDeltaX(0), m_nDeltaY(0), m_nButtonStates(0) {}
	~SEventData_MouseEvent() {}
	int m_nButtonStates;
	int m_nMWheelDelta;
	int m_nDeltaX;
	int m_nDeltaY;
};

/**
Event structure.
holds id, class, additionalArgs
*/
struct IEvent 
{
public:

	IEvent()
	{
		pData = 0;
	}

	virtual ~IEvent() 
	{
		if (pData)
		{
			delete pData; 
			pData = 0;
		}
	}

	/** The id of the event. @see EVENT_NAME */
	int eventId;	
	/** The class of the event. @see EVENT_CLASS */
	int eventClass;
	/** Possible event data */
	IEventData *pData;
};